<?php

namespace App\Http\Controllers\Auth;

use App\User;
use App\Mailer\UserMailer;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;

class RegisterController extends Controller
{
	/*
	|--------------------------------------------------------------------------
	| Register Controller
	|--------------------------------------------------------------------------
	|
	| This controller handles the registration of new users as well as their
	| validation and creation. By default this controller uses a trait to
	| provide this functionality without requiring any additional code.
	|
	*/

	use RegistersUsers;

	/**
	 * Where to redirect users after registration.
	 *
	 * @var string
	 */
	protected $redirectTo = '/home';

	/**
	 * Create a new controller instance.
	 *
	 * @return void
	 */
	public function __construct()
	{
		$this->middleware('guest');
	}

	/**
	 * Get a validator for an incoming registration request.
	 *
	 * @param  array $data
	 * @return \Illuminate\Contracts\Validation\Validator
	 */
	protected function validator(array $data)
	{
		return Validator::make($data, [
			'name' => 'required|string|max:255',
			'email' => 'required|string|email|max:255|unique:users',
			'password' => 'required|string|min:6|confirmed',
		]);
	}

	/**
	 * Create a new user instance after a valid registration.
	 *
	 * @param  array $data
	 * @return User
	 */
	protected function create(array $data)
	{
		$user = User::create([
			'name' => $data['name'],
			'email' => $data['email'],
			// TODO 通过配置读取
			'avatar' => '/images/avatars/default.png',
			'confirmation_token' => str_random(40),
			'password' => bcrypt($data['password']),
			'api_token' => str_random(60),
			'settings' => ['city' => '']
		]);

		$this->sendVerifyEmailToUser($user);
        \Flash::success('一封激活邮件已发送到 '.$data['email'].' 请激活');
		return $user;
	}

	/**
	 * @param $user
	 */
	private function sendVerifyEmailToUser($user)
	{
		(new UserMailer())->welcome($user);
	}
}
